package main.proyecto_pei;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import utilities.BDSQLiteHelper;
import utilities.MyService;
import utilities.Preferencias;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.Toast;

public class Programacion extends Activity{
	//Widgets Form principal
	EditText txtCostoPorMinMismaComp,txtCostoPorSmsMismaComp,txtCostoPorMinDiffComp,txtCostoPorSmsDiffComp,txtMinIncluidos,txtMsjsIncluidos;
	RadioButton rbPrepago,rbPostpago;
	RadioGroup rgPlan;
	Spinner comboCompanias;
	//Widgets del Form presupuesto
	static EditText txtMontoFormPresup,txtNumDiasFormPresup;
	DatePicker datePickerFormPresup;
	final int PRESUPUESTO=999, PLAN=888;
	String montoPresup="",datePickerPresup="",numDiasPresup="";
	
	Calendar calendar = new GregorianCalendar();
	final int minYear = this.calendar.get(Calendar.YEAR);
    final int minMonth = this.calendar.get(Calendar.MONTH);
    final int minDay = this.calendar.get(Calendar.DAY_OF_MONTH);
    
    Preferencias pref;
    boolean tmp;
    
    //Metodo para evitar que el activity se reinicie al girar la pantalla
	@Override
	public void onConfigurationChanged(Configuration newConfig) {
	    super.onConfigurationChanged(newConfig);
	}
	
	@Override
	public void onCreate(Bundle SavedInstanceState){
		super.onCreate(SavedInstanceState);
		setContentView(R.layout.programacion);
		txtCostoPorMinMismaComp = (EditText)findViewById(R.id.txtCostoPorMinMismaComp);
		txtCostoPorSmsMismaComp = (EditText)findViewById(R.id.txtCostoPorSmsMismaComp);
		txtCostoPorMinDiffComp = (EditText)findViewById(R.id.txtCostoPorMinDiffComp);
		txtCostoPorSmsDiffComp = (EditText)findViewById(R.id.txtCostoPorSmsDiffComp);
		txtMinIncluidos = (EditText)findViewById(R.id.txtMinutosIncluidos);
		txtMsjsIncluidos = (EditText)findViewById(R.id.txtMensajesIncluidos);
		rbPrepago = (RadioButton)findViewById(R.id.rbPrepago);
		rbPostpago = (RadioButton)findViewById(R.id.rbPostpago);
		rgPlan = (RadioGroup)findViewById(R.id.radioGroupPlan);
		comboCompanias = (Spinner) findViewById(R.id.comboCompanias);
		pref = new Preferencias(Programacion.this);
		List<String> list = new ArrayList<String>();
		list.add("Tigo");
		list.add("Claro");
		list.add("Digicel");
		list.add("Movistar");
		list.add("Red");
		ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, list);
		dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		comboCompanias.setAdapter(dataAdapter);		
		rgPlan.setOnCheckedChangeListener(cambioPlan);
		cargarData(PLAN);
	}      
	
	/********************************************************************/
	/**						FUNCIONES DE BOTONES						*/
	/********************************************************************/
	public void onClickPresupuesto(View b){
     	showDialog(0);
	}
	
	 private RadioGroup.OnCheckedChangeListener cambioPlan = new RadioGroup.OnCheckedChangeListener(){
         public void onCheckedChanged(RadioGroup group, int checkedId) {
            if(rbPostpago.isChecked()){
            	txtMinIncluidos.setEnabled(true);
    			txtMsjsIncluidos.setEnabled(true);
            }else{
            	txtMinIncluidos.setText("");
    			txtMsjsIncluidos.setText("");
    			txtMinIncluidos.setEnabled(false);
    			txtMsjsIncluidos.setEnabled(false);
            }
         }
      };
      
	public void onClickGuardar(View v){
		BDSQLiteHelper usdbh = new BDSQLiteHelper(Programacion.this, "DB_PEI", null, 1);
		SQLiteDatabase db = null;
		
		if(validar()){
			try{
				db = usdbh.getWritableDatabase();
				//Hacemos un select para verificar si ya existen datos. Si ya existen es un update, sino un insert
				Cursor c_plan = db.query("PEI_PLAN", new String[] {"ID_PLAN"}, null, null, null, null, null);
				if(c_plan.moveToFirst()){
					lanzarMensajeDeCalculosActualizacion();
				}
				else{
					//Si no hay datos
					insert(db,PLAN);
					Toast.makeText(this,"Presupuesto Guardado" , Toast.LENGTH_SHORT).show();
					lanzarMensajeDeCalculos();
				}
				
			}catch(Exception e){
				e.printStackTrace();
				Log.i("ERROR GUARDAR", e.getMessage());
			}
			finally{
				//Verificamos si esta abierta ya que en el metodo insert() se cierra
				if(db.isOpen()) db.close();
			}
		}
	}
	private void actualizar(){
		BDSQLiteHelper usdbh = new BDSQLiteHelper(Programacion.this, "DB_PEI", null, 1);
		SQLiteDatabase db = null;
		try{
			db = usdbh.getWritableDatabase();
			update(db,PLAN);
		}catch(Exception e){e.printStackTrace();}
		pref.setPref(Preferencias.MINUTOS_CONSUMIDOS, "0");
        pref.setPref(Preferencias.MENSAJES_ENVIADOS, "0");
        pref.setPref(Preferencias.CONSUMO_TOTAL, "0.0");
		Toast.makeText(this,"Plan Actualizado" , Toast.LENGTH_SHORT).show();
	}
	private void lanzarMensajeDeCalculosActualizacion() {
		Calendar d = Calendar.getInstance();
		AlertDialog dialog;
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("¿Desea Continuar?");
		builder.setIcon(R.drawable.warning);
		builder.setMessage("Al actualizar el plan los cálculos actuales se borrarán.")
		.setCancelable(false)				
		.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int id) {
				dialog.cancel();
			}
			})
		.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int id) {
				actualizar();
				dialog.cancel();
			}
			});
		dialog = builder.create();
		dialog.show();
		if(!hayPresupuesto()) pref.setPref(Preferencias.EXISTE_PRESUPUESTO, Preferencias.NO);
		else pref.setPref(Preferencias.EXISTE_PRESUPUESTO, Preferencias.SI);
		pref.setPref(Preferencias.FECHA_CREACION_PLAN, d.getTimeInMillis() +"");
		/**
		 * Lanzamos el servicio que estara escuchando las llamadas y sms
		 */
		Intent in = new Intent(Programacion.this,MyService.class);
        this.startService(in); 
		
	}

	
	private void lanzarMensajeDeCalculos() {
		Calendar d = Calendar.getInstance();
		AlertDialog dialog;
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle(getString(R.string.lblInicioCalculos1));
		builder.setIcon(R.drawable.warning);
		builder.setMessage(getString(R.string.lblInicioCalculos2))
		.setCancelable(false)				
		.setNegativeButton("Aceptar", new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int id) {
				dialog.cancel();
			}
			});
		dialog = builder.create();
		dialog.show();
		if(!hayPresupuesto()) pref.setPref(Preferencias.EXISTE_PRESUPUESTO, Preferencias.NO);
		else pref.setPref(Preferencias.EXISTE_PRESUPUESTO, Preferencias.SI);
		pref.setPref(Preferencias.FECHA_CREACION_PLAN, d.getTimeInMillis() +"");
		/**
		 * Lanzamos el servicio que estara escuchando las llamadas y sms
		 */
		Intent in = new Intent(Programacion.this,MyService.class);
        this.startService(in); 
		
	}

	/********************************************************************/
	/**						FUNCIONES DE VARIAS							*/
	/********************************************************************/
	private boolean validar() {
		String msj="";
		ArrayList<Double> tmp = new ArrayList<Double>();
		if(txtCostoPorMinMismaComp.getText().toString().trim().equals("")){
			msj+="\n"+getString(R.string.lblCostosMismaComp_help);
		}else tmp.add(Double.parseDouble(txtCostoPorMinMismaComp.getText().toString().trim()));
		if(txtCostoPorMinDiffComp.getText().toString().trim().equals("")){
			msj+="\n"+getString(R.string.lblCostosDiffComp_help);
		}else tmp.add(Double.parseDouble(txtCostoPorMinDiffComp.getText().toString().trim()));
		if(txtCostoPorSmsMismaComp.getText().toString().trim().equals("")){
			msj+="\n"+getString(R.string.lblCostoPorMsjMismaComp_help);
		}else tmp.add(Double.parseDouble(txtCostoPorSmsMismaComp.getText().toString().trim()));
		if(txtCostoPorSmsDiffComp.getText().toString().trim().equals("")){
			msj+="\n"+getString(R.string.lblCostoPorMsjDiffComp_help);
		}else tmp.add(Double.parseDouble(txtCostoPorSmsDiffComp.getText().toString().trim()));
		if(rbPostpago.isChecked() && txtMinIncluidos.getText().toString().trim().equals("")){
			msj+="\n"+getString(R.string.lblMinIncluidos_help);
		}else if(rbPostpago.isChecked()) tmp.add(Double.parseDouble(txtMinIncluidos.getText().toString().trim()));
		if(rbPostpago.isChecked() && txtMsjsIncluidos.getText().toString().trim().equals("")){
			msj+="\n"+getString(R.string.lblMsjsIncluidos_help);
		}else if(rbPostpago.isChecked()) tmp.add(Double.parseDouble(txtMsjsIncluidos.getText().toString().trim()));
		if(rbPostpago.isChecked() && !hayPresupuesto()){
			msj+="\n-Ingrese el presupuesto";
		}
		for(int i=0;i<tmp.size();i++)
			if(tmp.get(i)==0){
				msj+="\n-Ningún costo puede ser cero";
				break;
			}
		if(!msj.equals("")){
			AlertDialog alertDialog = new AlertDialog.Builder(Programacion.this).create();
	        alertDialog.setTitle(getString(R.string.lblCamposVacios));
	        alertDialog.setMessage(msj);
	        alertDialog.setIcon(R.drawable.warning);
	        alertDialog.setButton(getString(R.string.lblAceptar), new DialogInterface.OnClickListener() {
	        	public void onClick(DialogInterface dialog, int which) {}
	        });
	        alertDialog.show();
	        return false;
		}
		return true;
	}
	
	private void cargarData(int op) {
		BDSQLiteHelper usdbh = new BDSQLiteHelper(this, "DB_PEI", null, 1);
		SQLiteDatabase db = null;
		String[] campos;
		
		if(rbPrepago.isChecked()){//Validacion al inicio de la App, si no hay datos en la BD por defecto rbPrepago esta checkeado y deshabilitamos los TextViews
			txtMinIncluidos.setEnabled(false);
			txtMsjsIncluidos.setEnabled(false);
		}
		
		try{
			db = usdbh.getReadableDatabase();
			
			if(op==PLAN){
				campos = new String[] {"ID_PLAN", "TIPO_PLAN","MINUTOS_INCLUIDOS","MENSAJES_INCLUIDOS","TARIFA_LOCAL","TARIFA_EXTERNA","COSTO_MSJ_LOCAL","COSTO_MSJ_EXTERNO","PROVEEDOR_SERVICIOS","FECHA_ULT_CALCULO"};
				Cursor c_plan = db.query("PEI_PLAN", campos, null, null, null, null, null);
				if(c_plan.moveToFirst()){
					if(c_plan.getString(1).toString().equals(getString(R.string.lblPostpago))) rbPostpago.setChecked(true);
					else{
						rbPrepago.setChecked(true);
						txtMinIncluidos.setEnabled(false);
		    			txtMsjsIncluidos.setEnabled(false);
					}
					txtMinIncluidos.setText(c_plan.getString(2));
					txtMsjsIncluidos.setText(c_plan.getString(3));
					txtCostoPorMinMismaComp.setText(c_plan.getString(4));//TARIFA_LOCAL
					txtCostoPorMinDiffComp.setText(c_plan.getString(5));//TARIFA_EXTERNA
					txtCostoPorSmsMismaComp.setText(c_plan.getString(6));//COSTO_MSJ_LOCAL
					txtCostoPorSmsDiffComp.setText(c_plan.getString(7));//COSTO_MSJ_EXTERNO
					comboCompanias.setSelection(sacarOperador(c_plan.getString(8)));//PROOVEEDOR
				}
			}
			else if(op==PRESUPUESTO){
				campos = new String[] {"ID_PRESUPUESTO","MONTO","FECHA_INICIO","CANTIDAD_DIAS"};
				Cursor c_presup = db.query("PEI_PRESUPUESTO", campos, null, null, null, null, null);
				if(c_presup.moveToFirst()){
					montoPresup=c_presup.getString(1);//MONTO
					datePickerPresup=c_presup.getString(2);//FECHA INICIO
					numDiasPresup=c_presup.getString(3);//NUMERO DE DIAS
					Log.i("READ", "Fecha recuperada: "+datePickerPresup);
				}
			}
		}catch(Exception e){
			e.printStackTrace();
			Log.i("ERROR CARGARDATA", e.getMessage());
		}
		finally{
			db.close();
		}
	}
	
	private void insert(SQLiteDatabase db, int op){
		String plan, compania = comboCompanias.getSelectedItem().toString();
		if(rbPrepago.isChecked()) plan = getString(R.string.lblPrepago);
		else plan = getString(R.string.lblPostpago);
		try{
			if(op==PLAN){
				db.execSQL("INSERT INTO PEI_PLAN(TIPO_PLAN,MINUTOS_INCLUIDOS,MENSAJES_INCLUIDOS,TARIFA_LOCAL,TARIFA_EXTERNA,COSTO_MSJ_LOCAL,COSTO_MSJ_EXTERNO,PROVEEDOR_SERVICIOS,FECHA_ULT_CALCULO) " +
					"VALUES ('"+plan+"'," +
							"'"+txtMinIncluidos.getText().toString()+"'," +
							"'"+txtMsjsIncluidos.getText().toString()+"'," +
							"'"+txtCostoPorMinMismaComp.getText().toString()+"'," +
							"'"+txtCostoPorMinDiffComp.getText().toString()+"'," +
							"'"+txtCostoPorSmsMismaComp.getText().toString()+"'," +
							"'"+txtCostoPorSmsDiffComp.getText().toString()+"'," +
							"'"+compania+"'," +
							"'"+new Date().toLocaleString()+"')");
				if(txtMinIncluidos.getText().toString().equals("")){
					pref.setPref(Preferencias.MINUTOS_INCLUIDOS, -1+"");
					pref.setPref(Preferencias.SMS_INCLUIDOS,-1+"");
				}else{
					pref.setPref(Preferencias.MINUTOS_INCLUIDOS, txtMinIncluidos.getText().toString());
					pref.setPref(Preferencias.SMS_INCLUIDOS,txtMsjsIncluidos.getText().toString());
				}
			
			}
			else if(op==PRESUPUESTO){
			/**Si hay datos en el formulario de presupuesto, los almacenamos en la BD**/

				String fecIni = datePickerFormPresup.getDayOfMonth() +"-"+ datePickerFormPresup.getMonth() +"-"+datePickerFormPresup.getYear()  ;//new SimpleDateFormat("MM-dd-yyyy").format(fechaInicio);
				
				Calendar c = Calendar.getInstance();
	    		String[] f = fecIni.split("-");
	    		c.set(Integer.parseInt (f[2]),Integer.parseInt(f[1]),Integer.parseInt(f[0]));
	    		pref.setPref(Preferencias.FECHA_INI_PRESUP, c.getTimeInMillis()+"");
				Log.i("INSERT","Fecha a gaurdar: "+fecIni);
				db.execSQL("INSERT INTO PEI_PRESUPUESTO(MONTO,FECHA_INICIO,CANTIDAD_DIAS)" +
						"VALUES ('"+txtMontoFormPresup.getText().toString().trim()+"'," +
								"'"+fecIni+"'," +
								"'"+txtNumDiasFormPresup.getText().toString().trim()+"');");
			}
		}catch(Exception e){
			e.printStackTrace();
			Log.i("ERROR INSERT", e.getMessage());
		}
		finally{
			db.close();
		}
	}
	
	private void update(SQLiteDatabase db, int op){
		String plan, compania = comboCompanias.getSelectedItem().toString();
		if(rbPrepago.isChecked()) plan = getString(R.string.lblPrepago);
		else plan = getString(R.string.lblPostpago);
		try{
			if(op==PLAN){
				db.execSQL("UPDATE PEI_PLAN SET " +
							"TIPO_PLAN='"+plan+"'," +
							"MINUTOS_INCLUIDOS='"+txtMinIncluidos.getText().toString()+"'," +
							"MENSAJES_INCLUIDOS='"+txtMsjsIncluidos.getText().toString()+"'," +
							"TARIFA_LOCAL='"+txtCostoPorMinMismaComp.getText().toString()+"'," +
							"TARIFA_EXTERNA='"+txtCostoPorMinDiffComp.getText().toString()+"'," +
							"COSTO_MSJ_LOCAL='"+txtCostoPorSmsMismaComp.getText().toString()+"'," +
							"COSTO_MSJ_EXTERNO='"+txtCostoPorSmsDiffComp.getText().toString()+"'," +
							"PROVEEDOR_SERVICIOS='"+compania+"'," +
							"FECHA_ULT_CALCULO='"+new Date().toLocaleString()+"';");
				if(txtMinIncluidos.getText().toString().equals("")){
					pref.setPref(Preferencias.MINUTOS_INCLUIDOS, -1+"");
					pref.setPref(Preferencias.SMS_INCLUIDOS,-1+"");
				}else{
					pref.setPref(Preferencias.MINUTOS_INCLUIDOS, txtMinIncluidos.getText().toString());
					pref.setPref(Preferencias.SMS_INCLUIDOS,txtMsjsIncluidos.getText().toString());
				}
				Intent intent = new Intent(Programacion.this, MainActivity.class);
				finish();
				startActivity(intent);
			}
			else if(op==PRESUPUESTO){
			/**Si hay datos en el formulario de presupuesto, los almacenamos en la BD**/
				
				String fecIni = datePickerFormPresup.getDayOfMonth() +"-"+ datePickerFormPresup.getMonth() +"-"+datePickerFormPresup.getYear()  ;//new SimpleDateFormat("MM-dd-yyyy").format(fechaInicio);
				
				Calendar c = Calendar.getInstance();
	    		String[] f = fecIni.split("-");
	    		c.set(Integer.parseInt (f[2]),Integer.parseInt(f[1]),Integer.parseInt(f[0]));
	    		pref.setPref(Preferencias.FECHA_INI_PRESUP, c.getTimeInMillis()+"");
	    		
				Log.i("UPDATE","Fecha a gaurdar: "+fecIni);
				db.execSQL("UPDATE PEI_PRESUPUESTO SET " +
								"MONTO='"+txtMontoFormPresup.getText().toString().trim()+"'," +
								"FECHA_INICIO='"+fecIni+"'," +
								"CANTIDAD_DIAS='"+txtNumDiasFormPresup.getText().toString().trim()+"';");
			}
		}catch(Exception e){
			e.printStackTrace();
			Log.i("ERROR UPDATE", e.getMessage());
		}
		finally{
			db.close();
		}
	}
	
	private int sacarOperador(String op){
		//Se analiza en el mismo orden en que se setearon al spinner
		if(op.equals("Tigo")) return 0;
		else if(op.equals("Claro")) return 1;
		else if(op.equals("Digicel")) return 2;
		else if(op.equals("Movistar")) return 3;
		else return 4;
	}


	/********************************************************************/
	/**								DIALOGOS							*/
	/********************************************************************/
	@Override
	protected Dialog onCreateDialog(int id) {
	 Dialog dialog = null;
	    switch(id) {
    	    case 0:
	    	     dialog = new Dialog(Programacion.this);
	    	     dialog.setTitle("\t   "+this.getResources().getString(R.string.lblTituloFormPresup));
	    	     dialog.setContentView(R.layout.form_presupuesto);
	    	     txtMontoFormPresup = (EditText)dialog.findViewById(R.id.txtMontoFormPresup);
	    	     txtNumDiasFormPresup = (EditText)dialog.findViewById(R.id.txtNumDiasFormPresup);
	    	     datePickerFormPresup = (DatePicker)dialog.findViewById(R.id.datePickerFormPresup);
	    	     datePickerFormPresup.init(minYear,minMonth,minDay ,cambioDeFecha);
	    	     cargarData(PRESUPUESTO);
	    	     try{
	    	    	 if(!datePickerPresup.equals("")){//Si alguno de los 3 campos esta vacio es porque no se recuperaron registros de la BD
	    	    		 txtMontoFormPresup.setText(montoPresup);//MONTO
	    	    		 txtNumDiasFormPresup.setText(numDiasPresup);//CANTIDAD_DIAS
	    	    		 Calendar c = Calendar.getInstance();
	    	    		 String[] f = datePickerPresup.split("-");
	    	    		 Log.i("PEI", "TAM="+f.length + " | D=" +f[0]+" | M="+f[1]+ " | A="+f[2]);
	    	    		 c.set(Integer.parseInt (f[2]),Integer.parseInt(f[1]),Integer.parseInt(f[0]));
	    	    		 datePickerFormPresup.updateDate(c.get(Calendar.YEAR),c.get(Calendar.MONTH),c.get(Calendar.DAY_OF_MONTH));
	    	    	 }
	    	     }catch (Exception e) {
					e.printStackTrace();
					Log.i("ERROR PRESUPUESTO",e.getMessage());
				}
	    	     
	    	     Button btnCancelar = (Button)dialog.findViewById(R.id.btnCancelarFormPresup);
	    	     Button btnAceptar = (Button)dialog.findViewById(R.id.btnAceptarFormPresup);
	    	     btnCancelar.setOnClickListener(onClickCancelar);
	    	     btnAceptar.setOnClickListener(onClickAceptar);

    	     break;
	    }
	    return dialog;
	}
	
	private OnClickListener onClickCancelar = new OnClickListener() {
        public void onClick(View v) {
            txtMontoFormPresup.setText("");
            txtNumDiasFormPresup.setText("");
            dismissDialog(0);
        }
    };
    private OnClickListener onClickAceptar = new OnClickListener() {
        public void onClick(View v) {
        	
        	if(txtMontoFormPresup.getText().toString().trim().equals("")){
        		Toast.makeText(Programacion.this,getString(R.string.lblMontoFormPresup_help), Toast.LENGTH_SHORT).show();
        		return;
        	}
        	if(txtNumDiasFormPresup.getText().toString().trim().equals("")){
        		Toast.makeText(Programacion.this,getString(R.string.lblNumDiasFormPresup_help), Toast.LENGTH_SHORT).show();
        		return;
        	}
        	BDSQLiteHelper usdbh = new BDSQLiteHelper(Programacion.this, "DB_PEI", null, 1);
    		SQLiteDatabase db = null;
    		try{
    			db = usdbh.getWritableDatabase();
				//Hacemos un select para verificar si ya existen datos. Si ya existen es un update, sino un insert
				Cursor c = db.query("PEI_PRESUPUESTO", new String[] {"ID_PRESUPUESTO"}, null, null, null, null, null);
				if(c.moveToFirst()){
					update(db,PRESUPUESTO);
					Toast.makeText(Programacion.this, "Actualizado", Toast.LENGTH_SHORT).show();
				}
				else{
					insert(db,PRESUPUESTO);
					Toast.makeText(Programacion.this, "Guardado", Toast.LENGTH_SHORT).show();
				}
				pref.setPref(Preferencias.EXISTE_PRESUPUESTO, Preferencias.SI);
				if(Configuracion.checkNotifLimPresup != null) Configuracion.checkNotifLimPresup.setEnabled(true);
    		}catch(Exception e){
    			e.printStackTrace();
    			Log.i("ERROR PRESUPUESTO", e.getMessage());
    		}
    		finally{
    			if(db.isOpen()) db.close();
    		}
            dismissDialog(0);
        } 
    };
    
    OnDateChangedListener cambioDeFecha = new OnDateChangedListener() {
        public void onDateChanged(DatePicker view, int year,int month, int day) {
            Calendar newDate = Calendar.getInstance();
            newDate.set(year, month, day);
            if (calendar.after(newDate)) {
                view.init(minYear, minMonth, minDay, this);
            }
        }
    };
    
    
    
    
    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_programacion, menu);
        return true;
    }
    
  
    @Override    
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_plan:
            	AlertDialog dialog;
        		AlertDialog.Builder builder = new AlertDialog.Builder(this);
        		builder.setTitle("¿Borrar Plan?");
        		builder.setIcon(R.drawable.warning);
        		builder.setMessage("¿Confirma eliminar los datos del plan? Si existe un presupuesto creado también se borrará")
        		.setCancelable(false)				
        		.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
        			public void onClick(DialogInterface dialog, int id) {
        				eliminar("PLAN");
        				dialog.cancel();
        			}
        			})
        			.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
        			public void onClick(DialogInterface dialog, int id) {
        				dialog.cancel();
        			}
        			});
        		dialog = builder.create();
        		dialog.show();
            	return true;
            case R.id.menu_presup:
            	AlertDialog dialog2;
        		AlertDialog.Builder builder2 = new AlertDialog.Builder(this);
        		builder2.setTitle("¿Borrar Presupuesto?");
        		builder2.setIcon(R.drawable.warning);
        		builder2.setMessage("¿Confirma eliminar los datos del presupuesto?")
        		.setCancelable(false)				
        		.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
        			public void onClick(DialogInterface dialog, int id) {
        				eliminar("PRESUP");
        				dialog.cancel();
        			}
        			})
        			.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
        			public void onClick(DialogInterface dialog, int id) {
        				dialog.cancel();
        			}
        			});
        		dialog2 = builder2.create();
        		dialog2.show();
            	return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    
    
	private void eliminar(String t){
		BDSQLiteHelper usdbh = new BDSQLiteHelper(Programacion.this, "DB_PEI", null, 1);
		SQLiteDatabase db = null;
		try {
			db = usdbh.getWritableDatabase();
			
			if(t.equals("PRESUP")){
				db.execSQL("DELETE FROM PEI_PRESUPUESTO");
				pref.setPref(Preferencias.EXISTE_PRESUPUESTO, Preferencias.NO);
			}else{
				db.execSQL("DELETE FROM PEI_PRESUPUESTO");
				db.execSQL("DELETE FROM PEI_PLAN");
				pref.setPref(Preferencias.EXISTE_PRESUPUESTO, Preferencias.NO);
				pref.setPref(Preferencias.MINUTOS_INCLUIDOS, -1+"");
				pref.setPref(Preferencias.SMS_INCLUIDOS,-1+"");
				pref.setPref(Preferencias.FECHA_CREACION_PLAN, "");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			Log.i("ERROR ELIMINARALERTA", e.getMessage());
		}
		finally{
			db.close();
		}
		//finish();
		startActivity(new Intent(this, MainActivity.class));
	}
	
	private boolean hayPresupuesto(){
		BDSQLiteHelper usdbh = new BDSQLiteHelper(Programacion.this, "DB_PEI", null, 1);
		SQLiteDatabase db = null;
		try{
			db = usdbh.getReadableDatabase();
			//Hacemos un select para verificar si ya existen datos. Si ya existen es un update, sino un insert
			Cursor c_plan = db.query("PEI_PRESUPUESTO", new String[] {"ID_PRESUPUESTO"}, null, null, null, null, null);
			if(c_plan.moveToFirst()){//Si ya esta creado el plan, creamos
				db.close();
				return true;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		finally{
			db.close();
		}
		return false;
	}

}
